Listin Gambas2
Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas
Origine : http://listingambas.blogspot.com/2011/06/anexo-2-convert-miniaturas-en-nuestro.htmlAnnexe 2: convert, des miniatures dans notre gridviewDonnees
Dans
notre gridviewDonnees, nous constatons que nous ne pouvons pas afficher
des images entières, pourquoi ne pas en faire de petites vignettes que
nous
pourions ainsi mieux voir ....???? Linux possède des
commandes et des programmes libres pour cela
.... Au travail:
Le
programme
convert
va nous aider à réduire la taille des images téléchargées nécessaires à
notre gridview,
Installation:
Depuis
une
console
système,
à
l'invite on entre "convert", si nous ne le
trouvons pas, il nous faut installer le programme.
Convert $
Le programme
«convert» peut être trouvé dans les paquets suivants:
*
Imagemagick
*-
Imagemagick-compat graphicsmagick
Essayez:
sudo apt-get install <paquet sélectionné>
bash:
convert : command not found
$ Sudo
apt-get install imagemagick
On nous demande
de confirmer l'installation du paquet, et il s'installe.
Utilisez notre
programme pour convertir: SHELL
Une fois que nous
avons installé le programme, incluons le
code que nous allons faire :
-
chaque fois que nous entrons ou modifions un enregistrement, au moment de remplir gridviewDonnees, nous voulons voir apparaître dans notre grille, au lieu de l'image choisie, une image réduite (par exemple 120x120 pixels) .
-
Depuis la ligne de commande pour "redimensionner" une image à 120x120, nous ferons comme suit ...
$ convert -size 120x120
lena512.bmp -resize 120x120 +profile '*' thumbnailDD.jpg
dAinsi,
"-size 120x120" donne comme
indication au décodeur JPEG que
l'image sera chargée en 120x120, ce qui permet de tourner plus vite et
empêche le retour à une image haute résolution. Le “-resize 120x120” spécifie les dimensions
désirées de l'image de sortie. Elle sera redimensionnée
de sorte que sa plus grande taille sera de 120 pixels. Le
"*"
dans
"+
profile"
supprime
toute information ICM, EXIF, IPTC, ou
d'autres
profils qui peuvent être présents dans l'image d'entrée et ne sont pas
nécessaires dans les vignettes. "
L'exécution
de cette commande sur l'image "lena512.bmp" de 257,1 Ko, nous a permis
de la convertir en "thumbnailDD.jpg" de seulement 3,7 Ko.
Alors,
comment le faire
en
gambas2? Eh
bien,
avec
la commande "SHELL"
Nous allons
créer un nouveau module que nous appelons miniatures
Nous y insérons
ce code :
PUBLIC function faire(fichier
AS String, taille AS String) AS string
DIM Proc AS process
DIM ligne AS String
DIM mini AS String
'vérifier si le réperoire des miniatureas existe
IF Exist("~/listin/mini") THEN
' le répertoire existe , ne pas le créer
ELSE
'le
répertoire n'existe pas , il faut le créer...
'avant de
s'y placer
MKDIR "~/listin"
'on se
place dans “mini”
MKDIR "~/listin/mini"
ENDIF
'note :
'commande
: file.dir(path), n'extrait que le chemin (sans le nom de fichier)
'commande
: file.name(path), n'extrait que le nom de fichier (sans le chemin)
mini = "~/listin/mini" & "/mini" & file.name(fichier)
IF Exist(mini) THEN
'l'archive
mini
existe,
ne
pas
la créer
RETURN mini
ELSE
'La
taille peut être 120x120, 96x96, etc
ligne = "convert -size " & taille & " " & fichier & " -resize " & taille & " +profile '*' " & mini
proc = SHELL ligne WAIT
'exécuter le processus et contrôler le flux
de sortie dans notre application
RETURN mini
ENDIF
END
Notes:
1 - En
plus
de
redimentionner
l'image, la
fonction
miniatures.faire
() retourne
le
chemin
où
sera crée la vignette.
2 - "~
/
listin
":
Le caractère ~ est remplacé par le répertoire home de l'utilisateur, quel que soit l'utilisateur "/ home / Juillet" ou "/ home / john".
Le caractère ~ est remplacé par le répertoire home de l'utilisateur, quel que soit l'utilisateur "/ home / Juillet" ou "/ home / john".
3 - Exist()
: EXist ("~
/
Listin
/
mini
"): En cas de non existence,
nous
allons
créer
un
répertoire
à partir de notre home / user, appelé
Listin / mini où stocker toutes les miniatures que nous ferons.
Exist ( mini ) : Sl l'archive existe, nous exécuterons convert
Exist ( mini ) : Sl l'archive existe, nous exécuterons convert
4. SHELL : cette commande exécute le programme convert en ligne de commande, avec tous les attributs
que nous avons ajoutés (le chemin du fichier, la taille et le nouveau
nom de la vignette)
Bien, une
fois le
code
élaboré, et le
nouveau
module
créé, nous allons créer une checkbox
(checkboxmini) dans le formulaire Fmain,
pour
que
l'utilisateur
"active
ou désactive" l'option d'utilisation des
miniatures dans
gridviewDonnees,
et
ainsi
on
va
également changer la subroutine
"titre.remplir()" pour afficher les vignettes ou les fichiers
originaux.

Nous devons
définir dans le formulaire Fmain
que lorsque la valeur de checkboxmini change, il faut aussi exécuter
la routine Tittre.Remplir ()
PUBLIC
SUB CheckBoxmini_Click ()
titre. remplir
()
END
Et dans le code
Titre.Remplir ()
:
PUBLIC SUB remplir ()
DIM a AS
Integer
FMain.
gridviewDonnees . Rows . COUNT
= var. id . COUNT
FOR a =
0 TO var. id . COUNT
- 1
WITH FMain
IF
FMain.
CheckBoxmini
. Value
=
FALSE
THEN
.
gridviewDonnees . Rows . Heigh
= 25
.
gridviewDonnees [a, 0 ]. Picture
=
Picture [var. photo [a]]
ELSE
.
gridviewDonnees [a, 0 ]. Alignment
= 1
.
gridviewDonnees . Rows . Heigh
= 100
.
gridviewDonnees [a, 0 ]. Picture
= Picture [miniatures. faire (var. photo [a], "96x96" )]
ENDIF
.
gridviewDonnees [a, 1 ]. text
= var. nom [s]
.
gridviewDonnees [a, 2 ]. text
= var. prenoms [a]
... ....
Remarque:
La partie en jaune est ce qui a changé, ce qui fait que lorsque
checkboxmini.value = false, l'image normale est tracée, et quand checkboxmini.value = true, on réalise la
vignette et on redimensionne la hauteur de la ligne pour que
l'image soit visible.
Remarque
importante: Dans
tous
les
endroits
où
gridviewDonnees est remplie, il faut ajouter
le même code.
Et nous devons faire aussi
le même
changement dans
le
module
de
filtrer.ConcepteFiltre.
...
...
...
...
valider
=
estdans (lignes, patron) AND
estdans
(lignes, patron1)
AND
estdans
(lignes, patron2)
IF
valider
THEN
nombre +
=
1
FMain. gridviewDonnees
. Rows
. COUNT
=
nombre
WITH
FMain
IF FMain. CheckBoxmini
. Value
=
FALSE
THEN
. gridviewDonnees
. Rows
. height
=
25
. gridviewDonnees
[nombre -
1
, 0
]. Picture
=
Picture
[var. photo
[a]]
ELSE
. gridviewDonnees
[nombre -
1
, 0
]. Alignment
=
1
. gridviewDonnees
. Rows
. height
=
100
. gridviewDonnees
[nombre -
1
, 0
]. Picture
=
Picture
[. miniatures. faire
(var. photo
[a], "96x96"
)]
ENDIF
. gridviewDonnees
[nombre -
1
, 1
]. text
=
. var nom
[s]
...
....
Ici j'ai mis un exemple de l'aspect des enregistrements avec et sans vignettes:
Pas de vignette
|
Avec des vignettes
|
![]() |
![]() |
![]() .... avec les
vignettes ... c'est beaucoup mieux non?
|